package com.wyh.common.utils;


import net.sourceforge.pinyin4j.PinyinHelper;

import java.util.Random;




import java.util.HashMap;
import java.util.Map;
import java.util.Random;



/**
 * 编码规则
 * 企业标识 - 账号起始值

*/



public class AccountCodeUtils {
    // 企业标识（公司的缩写）
    private String companyAbbreviation;

    // 账号起始值
    private String startValue;

    // 构造方法
    public AccountCodeUtils(String companyName, String startValue) {
        this.companyAbbreviation = generateCompanyAbbreviation(companyName);
        this.startValue = startValue;
    }

    // 根据企业名称生成企业标识
    private static String generateCompanyAbbreviation(String companyName) {



        StringBuilder abbreviation = new StringBuilder();
//        // 分割公司名称为不同的部分，假设使用'-'作为分隔符
        String[] parts = companyName.split("-");

        // 第一个部分取三个首字母
        if (parts.length > 0) {
            abbreviation.append(getFirstLetters(parts[0], 3));
        }

        // 剩余部分每部分取一个首字母
        for (int i = 1; i < parts.length; i++) {
            abbreviation.append(getFirstLetters(parts[i], 1));
        }

        return abbreviation.toString();

    }

    // 提取部分名称的首字母
    private static String getFirstLetters(String part, int limit) {
        StringBuilder letters = new StringBuilder();
        int count = 0;
        for (char ch : part.toCharArray()) {
            if (Character.toString(ch).matches("[\\u4E00-\\u9FA5]")) {
                // 如果是中文字符，提取拼音首字母
                String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(ch);
                if (pinyins != null && pinyins.length > 0) {
                    letters.append(Character.toUpperCase(pinyins[0].charAt(0)));
                    count++;
                }
            } else if (Character.isLetter(ch)) {
                // 如果是英文字符，直接提取
                letters.append(Character.toUpperCase(ch));
                count++;
            }
            if (count >= limit) {
                break; // 只取到指定数量的首字母
            }
        }
        return letters.toString();
    }

    // 获取企业标识
    public String getCompanyAbbreviation() {
        return companyAbbreviation;
    }

    // 获取账号起始值
    public String getStartValue() {
        return startValue;
    }

    // 设置账号起始值
    public void setStartValue(String startValue) {
        this.startValue = startValue;

    }

    // 生成新的账号
    public String generateNewAccount() {
        // 生成的账号格式为 "企业标识-账号编号"

        int numericValue = Integer.parseInt(startValue);
        numericValue++;
        // 生成的账号格式为 "企业标识-账号编号"
        String newAccount = companyAbbreviation + String.format("%04d", numericValue);
        // numericValue++;
        startValue = String.format("%04d", numericValue);
        return newAccount;
    }
}

